package com.sunni.反射;

import com.sunni.反射.entity.Person;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;

public class _03_Constructor构造器类 {
/*
            * 获取构造器的意义：实例化对象！newInstance();

            - 获取++public权限++修饰的构造器
            * Constructor[] getConstructors()   -- 获取全部
            * Constructor getConstructor(String name)   -- 获取指定

            - 获取<u>所有权限</u>修饰的构造器
            * Constructor[] getDeclaredConstructors()
            * Constructor getDeclaredConstructor(String name)
* */

    public static void main(String[] args) throws Exception {

        // 0.加载.class类
        Class personClass = Person.class;

        System.out.println("===public 全部===");
        // public 全部
        Constructor[] constructors = personClass.getConstructors();
        for (Constructor constructor : constructors) {
            System.out.println("constructor = " + constructor);
        }
        System.out.println();


        System.out.println("===public 指定===");
        // public 指定
            // 类里现在有两个构造器 (利用方法重载[不同参数]，获得不同构造器)
                // 1. 全参构造器
                // 2. 无参构造器
        // 全参构造器
        Constructor constructorAll = personClass.getConstructor(Integer.class,String.class,Integer.class,Integer.class,Integer.class,Integer.class);
        // 无参构造器
        Constructor constructorNo = personClass.getConstructor();

        // 构造器对象.newInstance()：创建对象。 (调用 哪个构造器对象，就必须传入对应的参数)
            // constructorAll构造器对象，要求6个参数，就必须在.newInstance传入6个对应的参数。否则报IllegalArgumentException: wrong number of arguments，非法参数异常。
        Object personAll = constructorAll.newInstance(22,"无无开",22,22,22,22); //全参
        Object personNo = constructorNo.newInstance();


        // 创建无参对象，简化。类对象.newInstance() ，直接创建。
        Person person = (Person) personClass.newInstance();
        System.out.println("person = " + person);

    }



}
